package com.zyp.jobseeker.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.zyp.jobseeker.entity.Enterprise;
import com.zyp.jobseeker.mapper.EnterpriseMapper;
import com.zyp.jobseeker.mapper.UserMapper;
import com.zyp.jobseeker.service.EnterpriseService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;

/**
 * 企业信息服务实现类
 */
@Service
public class EnterpriseServiceImpl implements EnterpriseService {
    private static final Logger logger = LoggerFactory.getLogger(EnterpriseServiceImpl.class);

    @Autowired
    private EnterpriseMapper enterpriseMapper;
    @Autowired
    private UserMapper userMapper;
    /**
     * 获取企业信息
     */
    @Override
    public Enterprise getEnterpriseInfo(Long userId) {
        return enterpriseMapper.selectEnterpriseById(userId);
    }

    /**
     * 更新企业信息
     */
    @Override
    public boolean updateEnterpriseInfo(Enterprise enterprise) {
        return enterpriseMapper.updateEnterprise(enterprise) > 0;
    }

    /**
     * 根据ID查询企业信息（返回Optional）
     */
    @Override
    public Optional<Enterprise> findById(Long id) {
        return Optional.ofNullable(enterpriseMapper.selectEnterpriseById(id));
    }
    /**
     * 搜索企业列表
     */
    @Override
    public PageInfo<Map<String, Object>> searchEnterprises(
            String keyword, int page, int size, String userRole) {
        try {
            logger.info("开始搜索企业，参数：keyword={}, page={}, size={}, userRole={}",
                    keyword, page, size, userRole);

            // 构建查询参数
            Map<String, Object> params = new HashMap<>();
            params.put("keyword", keyword);
            params.put("pageNum", page);
            params.put("pageSize", size);

            // 执行分页查询
            PageHelper.startPage(page, size);
            List<Map<String, Object>> results = enterpriseMapper.searchEnterprises(params);

            // 根据角色过滤数据
            filterEnterpriseData(results, userRole);

            PageInfo<Map<String, Object>> pageInfo = new PageInfo<>(results);
            logger.info("企业搜索完成，返回结果数: {}", pageInfo.getTotal());
            return pageInfo;

        } catch (Exception e) {
            logger.error("企业搜索失败，错误信息：", e);
            throw new RuntimeException("企业搜索失败: " + e.getMessage());
        }
    }

    /**
     * 过滤企业数据（根据角色）
     */
    private void filterEnterpriseData(List<Map<String, Object>> enterprises, String userRole) {
        if ("学生".equals(userRole)) {
            // 学生角色移除用户基础信息
            for (Map<String, Object> enterprise : enterprises) {
                enterprise.remove("contact");  // 移除联系方式
            }
            logger.debug("学生角色数据过滤完成");
        } else if ("管理员".equals(userRole)) {
            // 管理员角色保留所有信息
            logger.debug("管理员角色保留完整数据");
        }
    }




}
